Tabellen [basics]: 1:n-Beziehungen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Beziehungen sind das Salz in der Datenbanksuppe. Wenn Du Daten verschiedener Art wie beispielsweise Kunden und Projekte in verschiedenen Tabellen speicherst, dann musst Du auf irgendeine Weise festlegen, für welchen Kunden welches Projekt ausgeführt wird. Wenn die Tabelle mit den Kunden ein Feld aufweist, das die Kundendatensätze eindeutig identifiziert, kannst Du der Projekte-Tabelle ein Feld zuweisen, in das Du den eindeutigen Identifizierer des Kunden einträgst, für den das Projekt durchgeführt wird. Damit erhalten wir eine Zuordnung von Kunden zu Projekten. In der Datenbankwelt gehen wir noch einen Schritt weiter und erstellen eine Beziehung, welche die beiden Tabellen auch noch in Form einer im Datenmodel festgelegten Regel verknüpft. Daraus resultieren noch weitere Möglichkeiten, die wir in diesem Artikel beschreiben werden.

Beispieldatenbank

Die Beispiele dieses Artikels findest Du in der Datenbank 2204_1nBeziehungen.accdb.

Grundlagen der 1:n-Beziehungen

Die 1:n-Beziehung ist die Grundlage für alle weiteren Beziehungen, die wir in diesem und in weiteren Artikeln vorstellen. Sie legt fest, wie man die Daten zweier Tabellen einander zuordnen kann. Gehen wir einmal von dem in der Einleitung beschriebenen Beispiel von Kunden und Projekten aus. Wichtig ist, dass wir ein Projekt hier als individuell auf einen Kunden zugeschnittenes Projekt betrachten.

Haben wir dann eine Tabelle mit Kunden, in der ein oder mehrere Kundendatensätze gespeichert sind und eine Tabelle mit entsprechenden Projekten, dann wollen wir auf irgendeine Weise festlegen, welches Projekt zu welchem Kunden gehört. Das beinhaltet, dass auch der Fall auftreten kann, dass wir einem Kunden mehrere Projekte zuordnen. Genau genommen wollen wir einem Kunden kein, ein oder mehrere Projekte zuordnen können. So können wir auch einfach einen Kundendatensatz anlegen, für den es vielleicht noch gar kein Projekt gibt.

Ein Projekt hingegen soll immer genau einem Kunden zugeordnet werden. Wir legen keine Projekte an, die noch keinem Kunden zugeordnet sind und auch das Anlegen von Projekten, die mehreren Kunden zugeordnet sind, soll nicht möglich sein.

Kunden zu Projekten zuordnen

Wie also können wir die Zuordnung grundsätzlich realisieren Die erste Voraussetzung für eine eindeutige Zuordnung von Kunden zu Projekten ist, dass es für jeden Kunden ein Feld mit eindeutigen Werten gibt. Dabei spielt es keine Rolle, ob es sich um ein Zahlenfeld oder ein Feld mit einem anderen Datentyp handelt. Wie sich zeigt, sind Zahlenfelder allerdings zu priorisieren: Gelegentlich gibt es Updates bei Microsoft, bei denen offensichtlich nur die Auswirkung auf die üblicherweise als eindeutiges Merkmal verwendeten Zahlenfelder ausreichend getestet wurden. Bei Tabellen, die beispielsweise Textfelder für das eindeutige Merkmal verwendet haben, gab es Probleme bis hin zur Unbenutzbarkeit der Datenbank.

Also wählen wir hier immer den Datentyp Zahl aus. Aber Moment. Was geschieht, wenn ich Kunden bisher in der Excel-Tabelle, in der ich die Kunden verwaltet habe, immer Kundennummern verwendet habe, die als erstes Zeichen einen Buchstaben enthalten, der dem ersten Buchstaben des Kundennamen entspricht Auch für diesen Fall gibt es eine Lösung: Du kannst durchaus ein Zahlenfeld als Primärschlüsselfeld nutzen und die eigentliche Kundennummer in einem eigenen Feld speichern.

Zuordnung per Fremdschlüsselfeld

Wenn wir nun die Tabelle tblKunden mit einigen Kundendatensätzen erstellt haben und eine Tabelle namens tblProjekte, stellt sich die Frage, wie wir festlegen können, dass ein Projekt einem bestimmten Kunden zugeordnet ist (siehe Bild 1)

Zu verknüpfende Tabellen

Bild 1: Zu verknüpfende Tabellen

Dazu kurz folgende Überlegung: Wenn wir in der Tabelle tblKunden ein Feld beispielsweise namens ProjektID hinzufügen, in das wir den Primärschlüsselwert eines der Projekte aus der Tabelle tblProjekte eintragen, können wir jedem Kunden nur ein Projekt zuweisen. Wir wollen aber durchaus für Kunden mehrere Projekte verwalten. Wenn wir für die Tabelle tblProjekte ein Feld namens KundeID anlegen, in das wir den Primärschlüsselwert des Kundendatensatzes eintragen, für den dieses Projekt durchgeführt wird, dann passt es. Wir können dann auch für zwei oder mehr Projekte den gleichen Kunden eintragen und haben somit genau die gewünschten Möglichkeiten.

Fremdschlüsselfeld hinzufügen

Also fügen wir der Tabelle tblProjekte als Erstes das als Fremdschlüsselfeld gedachte Feld hinzu – zunächst als einfaches Feld mit dem Namen KundeID und dem Felddatentyp Zahl (siehe Bild 2). Wir können hier nun theoretisch bereits Primärschlüsselwerte aus dem Feld KundeID in das Fremdschlüsselfeld der Tabelle tblProjekte eintragen. Allerdings haben wir keinerlei der Vorteile, die uns eine Beziehung mit referenzieller Integrität bietet – beispielsweise die automatische Kontrolle, dass nur solche Werte in das Fremdschlüsselfeld eingetragen werden können, die auch im Primärschlüsselfeld der Tabelle tblKunden enthalten sind. Also gehen wir noch einen Schritt weiter und fügen eine Beziehung hinzu.

Erweiterung der Tabelle um ein Fremdschlüsselfeld

Bild 2: Erweiterung der Tabelle um ein Fremdschlüsselfeld

Beziehung hinzufügen

Beziehungen kann man auf verschiedene Arten hinzufügen. Eine ist die aus dem Artikel Tabellen [basics]: Der Nachschlage-Assistent (www.access-basics.de/572). Im vorliegenden Artikel wollen wir die Beziehung jedoch einmal ohne Verwendung dieses Assistenten hinzufügen, damit Du genau siehst, was im Hintergrund alles geschieht. Deshalb fügen wir die Beziehung diesmal über das Beziehungen-Fenster hinzu, das wir mit dem Ribbonbefehl Datenbank-tools|Da-ten-banktools|Beziehungen öffnen.

Das Beziehungen-Fenster dürfte in dieser Phase der Entwicklung der Anwendung noch leer sein (siehe Bild 3). Gegebenenfalls tummeln sich dort ein paar Systemtabellen, die Du aber getrost entfernen kannst, indem Du sie markierst und dann mit der Entf-Taste aus dem Beziehungen-Fenster löschst.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar